<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // new 运算符；
        // 面向过程  面向对象
        // 类和对象
        // 对象如何创建  ，类如何创建
        // js里的类  ： 工厂模式 生产对象---》没有公共空间---》构造函数 ：1.有公共空间prototype 2.通过new来执行函数；


        // 工厂模式
        // function Person(name){
        //     let obj = {};
        //     obj.name = name;
        //     obj.fn = function(){
        //         console.log("fn");
        //     }
        //     return obj;
        // }


        // // function Person(name){
        // //     return {
        // //         name:name,
        // //         fn(){
        // //         console.log("fn")
        // //         }};
        // // }
        // let zhangsan = Person("张三");
        // let lisi = Person("李四");

        // 构造函数  ：也是普通的函数 ，通过new 来执行函数；

        // new 来执行函数 ：1，创建一个空对象  2. 把空对象和this绑定  3.隐式返还这个对象 4.可以执行函数

        // function test(){
        //     console.log("test、。。。。");
        // }



        // function Person(name){
        //     let obj = {};
        //     obj.name = name;
        //     obj.fn = function(){
        //         console.log("fn");
        //     }
        //     return obj;
        // }

        // test();
        // new test;  //通过new来执行函数
        function Person(name){
            this.name = name;
            this.fn = function(){
                console.log("fn");
            }
        }

        // 1，创建一个空对象  2. 把空对象和this绑定  3.隐式返还这个对象 4.可以执行函数
        function myNew(fn,name){
            let obj = {};  //创建一个空对象
            Person.call(obj,name);  //执行函数 且 把空对象和函数内的this绑定
            return obj;  //返还这个对象；
        }

        let zhangsan = myNew(Person,"张三");
        let lisi  = myNew(Person,"李四");
        console.log(zhangsan,lisi);


        let zhangsan2 = new Person("张三");  // new 叫实例化 new之后就得到对象；
        let lisi2 = new Person("李四");
        console.log(zhangsan2,lisi2);


    </script>
</body>
</html>